home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
program
/
shrlk201.zip
/
_SETUP.1
/
nsShareLock.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1997-07-22
|
28KB
|
739 lines
unit nsShareLock;
{ $DEFINE ActiveX} // ActiveX = TCustomControl !ActiveX = TComponent
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DsgnIntf, Registry;
const
DLLName = 'SHRLK20.DLL';
sl_OnInitialRun = WM_User + 0;
sl_OnCannotOpenRegistry = WM_User + 1;
sl_OnWithinGracePeriod = WM_User + 2;
sl_OnExtended = WM_User + 3;
sl_OnTriedToExtendAgain = WM_User + 4;
sl_OnUnlocked = WM_User + 5;
sl_OnInvalidUnlockCodeEntered = WM_User + 6;
sl_OnExceededTries = WM_User + 7;
sl_OnRegistryModified = WM_User + 8;
sl_OnWithinTrialPeriod = WM_User + 9;
sl_OnTrialExpired = WM_User + 10;
sl_OnClockMovedBack = WM_User + 11;
sl_OnRegistered = WM_User + 12;
sl_OnUserUnlockCheck = WM_User + 13;
sl_SuggestTerminate = WM_User + 14;
type
TProtectType = (ptNumberDays, ptSpecificDate, ptRunCount, ptNoExpire);
TStatusType = (stTrialPeriod, stRegistered, stGracePeriod, stExpired);
TUserEncryptionEvent = procedure (UnlockCode, UserName, UserCompanyName: string; var ExtensionLength: integer; var GoodUnlockCode: Boolean) of object;
TUserExtensionEvent = procedure (ExtensionLength: integer) of object;
TUserTerminateEvent = procedure (Reason: integer) of object;
{$IFDEF ActiveX}
TnsShareLock = class(TCustomControl)
{$ELSE}
TnsShareLock = class(TComponent)
{$ENDIF}
private
{$IFNDEF ActiveX}
//If we are deriving from TComponent then we have to make our own Handle
FSharelockHandle: HWND;
{$ENDIF}
FRegistryLocation : string;
FRegistryLocationBackup : string;
FsRegisteredTo : string;
FsUnRegistered : string;
FsRegistrationNumber : string;
FsProgramVersion : string;
FsCopyright : string;
FProtectType: TProtectType;
FTrialPeriodRemaining,
FTrialLength,
FGracePeriod,
FTries,
FOnTryNumber: integer;
FAbout,
FExpireDate,
FProductName,
FPrivateKey,
FCompanyName: string;
FUseDefaultDialogs: boolean;
FOnTrialExpired: TNotifyEvent;
FOnWithinGracePeriod: TNotifyEvent;
FOnUnlocked: TNotifyEvent;
FOnInvalidUnlockCodeEntered: TNotifyEvent;
FOnClockMovedBack: TNotifyEvent;
FOnWithinTrialPeriod: TNotifyEvent;
FOnExceededTries: TNotifyEvent;
FOnCannotOpenRegistry: TNotifyEvent;
FOnRegistered: TNotifyEvent;
FOnRegistryModified: TNotifyEvent;
FOnInitialRun: TNotifyEvent;
FOnTriedToExtendAgain: TNotifyEvent;
FOnExtended: TUserExtensionEvent;
FOnUserUnlockCheck: TUserEncryptionEvent;
FOnSuggestTerminate: TUserTerminateEvent;
procedure SetTries(Value: integer);
procedure SetProductName(Value: string);
procedure SetPrivateKey (Value: string);
procedure SetCompanyName(Value: string);
procedure SetGracePeriod(Value: integer);
procedure SetTrialLength(Value: integer);
function ReturnTrialPeriodRemaining: integer;
function ReturnTryNumber: integer;
function ReturnExpirationDate: TDateTime;
function ReturnUserName: string;
function ReturnUserCompanyName: string;
function ReturnSerialNumber: string;
function ReturnStatus: TStatusType;
function ReturnDLLVersion: string;
protected
{$IFDEF ActiveX}
procedure Paint; override;
{$ELSE}
procedure WndProc(var MessageIn: TMessage);
{$ENDIF}
procedure Received_OnInitialRun (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnInitialRun; {$ENDIF}
procedure Received_OnCannotOpenRegistry (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnCannotOpenRegistry; {$ENDIF}
procedure Received_OnWithinGracePeriod (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnWithinGracePeriod; {$ENDIF}
procedure Received_OnExtended (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnExtended; {$ENDIF}
procedure Received_OnTriedToExtendAgain (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnTriedToExtendAgain; {$ENDIF}
procedure Received_OnUnlocked (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnUnlocked; {$ENDIF}
procedure Received_OnInvalidUnlockCodeEntered(var Msg: TMessage); {$IFDEF ActiveX} message sl_OnInvalidUnlockCodeEntered; {$ENDIF}
procedure Received_OnExceededTries (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnExceededTries; {$ENDIF}
procedure Received_OnRegistryModified (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnRegistryModified; {$ENDIF}
procedure Received_OnWithinTrialPeriod (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnWithinTrialPeriod; {$ENDIF}
procedure Received_OnTrialExpired (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnTrialExpired; {$ENDIF}
procedure Received_OnClockMovedBack (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnClockMovedBack; {$ENDIF}
procedure Received_OnRegistered (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnRegistered; {$ENDIF}
procedure Received_OnUserUnlockCheck (var Msg: TMessage); {$IFDEF ActiveX} message sl_OnUserUnlockCheck; {$ENDIF}
procedure Received_SuggestTerminate (var Msg: TMessage); {$IFDEF ActiveX} message sl_SuggestTerminate; {$ENDIF}
public
constructor Create(aOwner: TComponent); override;
destructor Destroy; override;
property TrialPeriodRemaining: integer read ReturnTrialPeriodRemaining;
property TryNumber: integer read ReturnTryNumber;
property ExpirationDate: TDateTime read ReturnExpirationDate;
property UserName: string read ReturnUserName;
property UserCompanyName: string read ReturnUserCompanyName;
property SerialNum: string read ReturnSerialNumber;
property Status: TStatusType read ReturnStatus;
property DLLVersion: string read ReturnDLLVersion;
function DisplayAboutDialog: boolean;
procedure CheckProtection;
procedure EnterUnlockCode(sUnlockCode, sUserName, sUserCompanyName: string);
procedure DisplayRegistrationDialog;
published
property RegistryLocation: string read FRegistryLocation write FRegistryLocation;
property RegistryLocationBackup: string read FRegistryLocationBackup write FRegistryLocationBackup;
property TrialLength: integer read FTrialLength write SetTrialLength;
property Tries: integer read FTries write SetTries;
property GracePeriod: Integer read FGracePeriod write SetGracePeriod;
property Protection: TProtectType read FProtectType write FProtectType;
property ExpireDate: string read FExpireDate write FExpireDate;
property ProgramName: string read FProductName write SetProductName;
property PrivateKey: string read FPrivateKey write SetPrivateKey;
property UseDefaultDialogs: boolean read FUseDefaultDialogs write FUseDefaultDialogs;
property CompanyName: string read FCompanyName write SetCompanyName;
property About: string read FAbout write FAbout;
property OnTrialExpired: TNotifyEvent read FOnTrialExpired write FOnTrialExpired;
property OnWithinGracePeriod: TNotifyEvent read FOnWithinGracePeriod write FOnWithinGracePeriod;
property OnUnlocked: TNotifyEvent read FOnUnlocked write FOnUnlocked;
property OnInvalidUnlockCodeEntered: TNotifyEvent read FOnInvalidUnlockCodeEntered write FOnInvalidUnlockCodeEntered;
property OnClockMovedBack: TNotifyEvent read FOnClockMovedBack write FOnClockMovedBack;
property OnWithinTrialPeriod: TNotifyEvent read FOnWithinTrialPeriod write FOnWithinTrialPeriod;
property OnExceededTries: TNotifyEvent read FOnExceededTries write FOnExceededTries;
property OnRegistered: TNotifyEvent read FOnRegistered write FOnRegistered;
property OnRegistryModified: TNotifyEvent read FOnRegistryModified write FOnRegistryModified;
property OnCannotOpenRegistry: TNotifyEvent read FOnCannotOpenRegistry write FOnCannotOpenRegistry;
property OnInitialRun: TNotifyEvent read FOnInitialRun write FOnInitialRun;
property OnTriedToExtendAgain: TNotifyEvent read FOnTriedToExtendAgain write FOnTriedToExtendAgain;
property OnExtended: TUserExtensionEvent read FOnExtended write FOnExtended;
property OnUserUnlockCheck: TUserEncryptionEvent read FOnUserUnlockCheck write FOnUserUnlockCheck;
property OnSuggestTerminate: TUserTerminateEvent read FOnSuggestTerminate write FOnSuggestTerminate;
property About_RegisteredTo: string read FsRegisteredTo write FsRegisteredTo;
property About_UnRegistered: string read FsUnRegistered write FsUnRegistered;
property About_RegistrationNumber: string read FsRegistrationNumber write FsRegistrationNumber;
property About_ProgramVersion: string read FsProgramVersion write FsProgramVersion;
property About_Copyright: string read FsCopyright write FsCopyright;
end;
TnsShareLockAbout = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure Edit; override;
end;
TnsShareLockDLLVersion = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
end;
TnsShareLockExpireDate = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure Edit; override;
end;
TnsShareLockReg = class(TStringProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure Edit; override;
end;
procedure Register;
procedure CheckProtectionDLL(
FRegistryLocationA,
FRegistryLocationB,
FProductName,
FCompanyName,
FExpireDate,
FPrivateKey: pchar;
FTrialLength,
FGracePeriod,
FTries,
FUseDefaultDialogs,
FProtectType: integer
); stdcall; external DLLName name 'CheckProtectionDLL';
function GetTrialPeriodRemaining: integer; stdcall; external DLLName name 'GetTrialPeriodRemaining';
function GetTryNumber: integer; stdcall; external DLLName name 'GetTryNumber';
function GetExpirationDate: pchar; stdcall; external DLLName name 'GetExpirationDate';
function GetUserName: pchar; stdcall; external DLLName name 'GetUserName';
function GetUserCompanyName: pchar; stdcall; external DLLName name 'GetUserCompanyName';
function GetSerialNumber: pchar; stdcall; external DLLName name 'GetSerialNumber';
procedure InputUnlockCode(sUnlockCode, sUserName, sUserCompanyName: pchar); stdcall; external DLLName name 'InputUnlockCode';
procedure PassHandle(AppHandle: THandle); stdcall; external DLLName name 'PassHandle';
function GetDLLVersion: pchar; stdcall; external DLLName name 'GetDLLVersion';
procedure DoRegistration; stdcall; external DLLName name 'DoRegistration';
function GetStatus: integer; stdcall; external DLLName name 'GetStatus';
function ShowAboutDialog(
FSVersion,
FsCopyright,
FsRegisteredTo,
FsUnRegistered,
FsRegistrationNumber,
AppFilename: pchar
): boolean; stdcall; external DLLName name 'ShowAboutDialog';
implementation
uses nsDateEdit, nsRegPicker, nsUnlock, nsAbout;
procedure Register;
begin
RegisterComponents('Nesbitt Software', [TnsShareLock]);
RegisterPropertyEditor(typeinfo(string), TnsShareLock, 'About', TnsShareLockAbout);
RegisterPropertyEditor(typeinfo(string), TnsShareLock, 'DLLVersion', TnsShareLockDLLVersion);
RegisterPropertyEditor(typeinfo(string), TnsShareLock, 'ExpireDate', TnsShareLockExpireDate);
RegisterPropertyEditor(typeinfo(string), TnsShareLock, 'RegistryLocation', TnsShareLockReg);
RegisterPropertyEditor(typeinfo(string), TnsShareLock, 'RegistryLocationBackup', TnsShareLockReg);
end;
constructor TnsShareLock.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
//Set the date to something that will remain constant.
ShortDateFormat := 'm"/"d"/"yyyy';
DateSeparator := '/';
{$IFDEF ActiveX}
Width := 32;
Height := 32;
if not (csDesigning in ComponentState) then Visible := False;
TabStop := False;
{$ELSE}
FSharelockHandle := AllocateHWnd(WndProc);
{$ENDIF}
FProtectType := ptNumberDays;
FRegistryLocation := 'HKEY_CURRENT_USER\Software\SampleLocation1';
FRegistryLocationBackup := 'HKEY_CURRENT_USER\Software\SampleLocation2';
FExpireDate := FormatDateTime('ddddd', Now);
FTrialLength := 30;
FTrialPeriodRemaining := -1;
FGracePeriod := 0;
FProductName := 'Program';
FPrivateKey := 'A1B2C3';
FCompanyName := 'Company';
FUseDefaultDialogs := True;
FTries := 3;
FOnTryNumber := 0;
FAbout := 'nsShareLock';
FsRegisteredTo := 'This program is licensed to:';
FsUnregistered := 'This program is unregistered.';
FsRegistrationNumber := 'Registration Number:';
FsCopyright := 'Copyright 1997 My Software';
end;
destructor TnsShareLock.Destroy;
begin
{$IFNDEF ActiveX}
DeallocateHWnd(FSharelockHandle);
{$ENDIF}
inherited Destroy;
end;
//////////////////////////////////////////////////////////////////
{$IFNDEF ActiveX}
procedure TnsShareLock.WndProc(var MessageIn: TMessage);
begin
case MessageIn.Msg of
sl_OnInitialRun: Received_OnInitialRun (MessageIn);
sl_OnCannotOpenRegistry: Received_OnCannotOpenRegistry (MessageIn);
sl_OnWithinGracePeriod: Received_OnWithinGracePeriod (MessageIn);
sl_OnExtended: Received_OnExtended (MessageIn);
sl_OnTriedToExtendAgain: Received_OnTriedToExtendAgain (MessageIn);
sl_OnUnlocked: Received_OnUnlocked (MessageIn);
sl_OnInvalidUnlockCodeEntered: Received_OnInvalidUnlockCodeEntered (MessageIn);
sl_OnExceededTries: Received_OnExceededTries (MessageIn);
sl_OnRegistryModified: Received_OnRegistryModified (MessageIn);
sl_OnWithinTrialPeriod: Received_OnWithinTrialPeriod (MessageIn);
sl_OnTrialExpired: Received_OnTrialExpired (MessageIn);
sl_OnClockMovedBack: Received_OnClockMovedBack (MessageIn);
sl_OnRegistered: Received_OnRegistered (MessageIn);
sl_OnUserUnlockCheck: Received_OnUserUnlockCheck (MessageIn);
sl_SuggestTerminate: Received_SuggestTerminate (MessageIn);
else MessageIn.Result := DefWindowProc(FSharelockHandle, MessageIn.Msg, MessageIn.wParam, MessageIn.lParam);
end;
end;
{$ENDIF}
//////////////////////////////////////////////////////////////////
{$IFDEF ActiveX}
procedure TnsShareLock.Paint;
begin
Canvas.Brush.Color := clBtnFace;
Canvas.Font.Color := Canvas.Pen.Color;
Canvas.TextOut(5,5,'This application protected by ShareLock');
Width := Canvas.TextWidth('This application protected by ShareLock') + 10;
Height := Canvas.TextHeight('This application protected by ShareLock') + 10;
end;
{$ENDIF}
//////////////////////////////////////////////////////////////////
function TnsShareLockExpireDate.GetAttributes;
begin
Result := [paDialog, paReadOnly];
end;
//////////////////////////////////////////////////////////////////
procedure TnsShareLockExpireDate.Edit;
var
DateForm :TfrmDate;
sDate: string;
Year, Month, Day: Word;
begin
DateForm := TfrmDate.Create(Application);
try
DecodeDate(StrToDate(GetValue),Year, Month, Day);
sDate := DateForm.Execute(Year, Month, Day);
if sDate <> '' then SetValue(sDate);
finally
DateForm.Free;
end;
end;
//////////////////////////////////////////////////////////////////
function TnsShareLockReg.GetAttributes;
begin
Result := [paDialog, paReadOnly];
end;
//////////////////////////////////////////////////////////////////
procedure TnsShareLockReg.Edit;
var
RegForm :TfrmRegistry;
begin
RegForm := TfrmRegistry.Create(Application);
try
if RegForm.ShowModal = mrOk then
begin
SetValue(RegForm.Key);
end;
finally
RegForm.Free;
end;
end;
//////////////////////////////////////////////////////////////////
function TnsShareLock.DisplayAboutDialog: Boolean;
begin
Result := ShowAboutDialog(
PChar(FsProgramVersion),
PChar(FsCopyright),
PChar(FsRegisteredTo),
PChar(FsUnRegistered),
PChar(FsRegistrationNumber),
PChar(Application.Exename)
);
end;
//////////////////////////////////////////////////////////////////////
procedure TnsShareLock.SetTrialLength(Value:integer);
begin
if Value <= 0 then Value := 1;
FTrialLength := Value;
end;
//////////////////////////////////////////////////////////////////////
procedure TnsShareLock.SetTries(Value:integer);
begin
if Value <= 0 then Value := 1;
FTries := Value;
end;
//////////////////////////////////////////////////////////////////////
procedure TnsShareLock.SetProductName(Value: string);
begin
if Value <> '' then FProductName := Value;
end;
//////////////////////////////////////////////////////////////////////
procedure TnsShareLock.SetPrivateKey(Value: string);
begin
if Value <> '' then FPrivateKey := Value;
end;
//////////////////////////////////////////////////////////////////////
procedure TnsShareLock.SetCompanyName(Value: string);
begin
if Value <> '' then FCompanyName := Value;
end;
//////////////////////////////////////////////////////////////////////
procedure TnsShareLock.SetGracePeriod(Value:integer);
begin
if Value < 0 then Value := 0;
FGracePeriod := Value;
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLockAbout.GetAttributes;
begin
Result := [paMultiSelect, paDialog, paReadOnly];
end;
//////////////////////////////////////////////////////////////////
procedure TnsShareLockAbout.Edit;
var
frmnsAbout: TfrmnsAbout;
begin
frmnsAbout := TfrmnsAbout.Create(Application);
try
frmnsAbout.ShowModal;
finally;
frmnsAbout.Free;
end;
end;
//////////////////////////////////////////////////////////////////
function TnsShareLockDLLVersion.GetAttributes;
begin
Result := [paMultiSelect, paReadOnly];
end;
//////////////////////////////////////////////////////////////////
procedure TnsShareLock.CheckProtection;
begin
//Send a handle to the DLL so that it can pass back messages
{$IFDEF ActiveX}
Passhandle(Handle);
{$ELSE}
PassHandle(FSharelockHandle);
{$ENDIF}
//This is the key routine
CheckProtectionDLL(
pchar(FRegistryLocation),
pchar(FRegistryLocationBackup),
pchar(FProductName),
pchar(FCompanyName),
PChar(FormatDateTime('ddddd', StrToDate(FExpireDate))),
PChar(FPrivateKey),
FTrialLength,
FGracePeriod,
FTries,
integer(FUseDefaultDialogs),
ord(FProtectType)
);
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnTrialPeriodRemaining: integer;
begin
Result := GetTrialPeriodRemaining;
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnTryNumber: integer;
begin
Result := GetTryNumber;
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnExpirationDate: TDateTime;
var
sTemp: string;
begin
//for some reason GetExpiration sometimes append a null to the end of the string - erase it.
sTemp := GetExpirationDate;
sTemp[Length(sTemp)] := ' ';
Result := StrToDate(sTemp);
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnUserName: string;
begin
Result := GetUserName;
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnUserCompanyName: string;
begin
Result := GetUserCompanyName;
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnSerialNumber: string;
begin
Result := GetSerialNumber;
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnDLLVersion: string;
begin
Result := GetDLLVersion;
end;
//////////////////////////////////////////////////////////////////////
function TnsShareLock.ReturnStatus: TStatusType;
begin
case GetStatus of
0: Result := stTrialPeriod;
1: Result := stRegistered;
2: Result := stGracePeriod;
3: Result := stExpired;
else Result := stTrialPeriod;
end;
end;
//////////////////////////////////////////////////////////////////////
procedure TnsShareLock.EnterUnlockCode(sUnlockCode, sUserName, sUserCompanyName: string);
begin
InputUnlockCode(pchar(sUnlockCode), pchar(sUserName), pchar(sUserCompanyName));
end;
//////////////////////////////////////////////////////////////////
procedure TnsShareLock.DisplayRegistrationDialog;
begin
DoRegistration;
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnInitialRun(var Msg: TMessage);
begin
if assigned(FOnInitialRun) then FOnInitialRun(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnCannotOpenRegistry(var Msg: TMessage);
begin
if assigned(FOnCannotOpenRegistry) then FOnCannotOpenRegistry(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnWithinGracePeriod(var Msg: TMessage);
begin
if assigned(FOnWithinGracePeriod) then FOnWithinGracePeriod(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnExtended(var Msg: TMessage);
begin
if assigned(FOnExtended) then FOnExtended(Msg.wParam);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnTriedToExtendAgain(var Msg: TMessage);
begin
if assigned(FOnTriedToExtendAgain) then FOnTriedToExtendAgain(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnUnlocked(var Msg: TMessage);
begin
if assigned(FOnUnlocked) then FOnUnlocked(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnInvalidUnlockCodeEntered(var Msg: TMessage);
begin
if assigned(FOnInvalidUnlockCodeEntered) then FOnInvalidUnlockCodeEntered(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnExceededTries(var Msg: TMessage);
begin
if assigned(FOnExceededTries) then FOnExceededTries(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnRegistryModified(var Msg: TMessage);
begin
if assigned(FOnRegistryModified) then FOnRegistryModified(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnWithinTrialPeriod(var Msg: TMessage);
begin
if assigned(FOnWithinTrialPeriod) then FOnWithinTrialPeriod(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnTrialExpired(var Msg: TMessage);
begin
if assigned(FOnTrialExpired) then FOnTrialExpired(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnClockMovedBack(var Msg: TMessage);
begin
if assigned(FOnClockMovedBack) then FOnClockMovedBack(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnRegistered(var Msg: TMessage);
begin
if assigned(FOnRegistered) then FOnRegistered(Self);
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_OnUserUnlockCheck(var Msg: TMessage);
function ParseToken(var str: string): string;
begin
if Pos('~', str) > 0 then
begin
Result := Copy(str, 1, Pos('~', str) - 1);
str := Copy (str, Pos('~', str) + 1, 1024);
end
else
begin
Result := str;
str := '';
end;
end;
var
sStringIn: string;
sUserName, sUserCompanyName, sUnlockCode: string;
iExtension: integer;
fGoodUnlockCode: boolean;
begin
sStringIn := StrPas(pChar(msg.lParam));
try
Msg.Result := 0;
sUserName := ParseToken(sStringIn);
sUnlockCode := ParseToken(sStringIn);
sUserCompanyName := ParseToken(sStringIn);
if msg.wParam = 0 then fGoodUnlockCode := False;
if msg.wParam = 1 then fGoodUnlockCode := True;
//User defined routine
begin
iExtension := 0;
if Assigned(FOnUserUnlockCheck) then
begin
FOnUserUnlockCheck( sUnlockCode, sUserName, sUserCompanyName, iExtension, fGoodUnlockCode);
if fGoodUnlockCode then
begin
if iExtension = 0 then Msg.Result := 366 else Msg.Result := iExtension;
end
else
begin
Msg.Result := -1;
end;
end
else
begin
Msg.Result := 0;
end;
end;
except
//showmessage('An error occured while processing User Unlock Check');
end;
end;
//////////////////////////////////////////////////////////////////
procedure TnsSharelock.Received_SuggestTerminate(var Msg: TMessage);
begin
if Assigned(FOnSuggestTerminate) then
begin
case Msg.wParam of
1: //Exceeded Tries
FOnSuggestTerminate(1);
2: //CannotOpenRegistry
FOnSuggestTerminate(2);
3: //Clock moved back
FOnSuggestTerminate(3);
end;
end;
end;
end.